﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
    class Program
    {
        static Dictionary<int, Student> student = new Dictionary<int, Student>();

        static void Main(string[] args)
        {
            //添加3个类，分别实现 IComparer<T>接口，实现对Student类的三个字段的排序。
            //1、学生类：学号、姓名、年龄
            //2、请选择：1、添加学生信息。2、查询学生信息。
            //3、重复的学号不能添加。
            //4、查询学生信息功能中有：1、查询所有（按学号排序）2、查询所有（按姓名排序），
            //    2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出
            Student s1 = new Student("张三",20 ,1);
            Student s2 = new Student("李四",21,2);
            student.Add(s1.Num,s1);
            student.Add(s2.Num,s2);
            one();
           
            Console.ReadKey();
        }
        static void one()
        {
            Console.WriteLine("请选择：1、添加学生信息。2、查询学生信息。");
            int key = int.Parse(Console.ReadLine());

            switch (key)
            {
                case 1:
                    add();
                    one();
                    break;
                case 2:
                    select();
                    break;
                default:
                    break;
            }
        }
        static void add()
        {
            Student s = new Student();
            Console.WriteLine("输入学生的姓名：");
            s.Name= Console.ReadLine();
            Console.WriteLine("输入学生的年龄：");
            s.Age= int.Parse(Console.ReadLine());
            Console.WriteLine("输入学生的学号：");
            s.Num = int.Parse(Console.ReadLine());

            if (student.ContainsKey(s.Num))
            {
                Console.WriteLine("重复了");
            }
            else
            {
                student[s.Num] = s;
            }

        }
        static void select()
        {
            Console.WriteLine("查询学生信息功能中有：1、查询所有（按学号排序）2、查询所有（按姓名排序)2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出");
            int a = int.Parse(Console.ReadLine());
            switch (a)
            {
                case 1:
                    List<Student> Num = student.Values.ToList();
                    Num.Sort(new NumSort());
                    pl(Num);
                    one();
                    break;
                case 2:
                    List<Student> Name = student.Values.ToList();
                    Name.Sort(new NameSort());
                    pl(Name);
                    one();
                    break;
                case 3:
                    List<Student> Age = student.Values.ToList();
                    Age.Sort(new AgeSort());
                    pl(Age);
                    one();
                    break;
                case 4:
                    Console.WriteLine("输入要查询的学号");
                    int num = int.Parse(Console.ReadLine());
                    if (student.ContainsKey(num))
                    {
                        Console.WriteLine(student[num]);
                    }
                    else
                    {
                        Console.WriteLine("查无此学生");
                        one();
                    }
                    break;
                case 5:
                    Console.WriteLine("你要的“退出”");
                    break;
                default:
                    break;
            }
        }
        private static void pl(List<Student> list)
        {
            foreach (Student s in list)
            {
                Console.WriteLine(s);
            }

        }
    }
}
